const store = {
  state: {
    num: 20
  },
  // 同步方法
  actions: {
    add1(newState: { num: number }, action: { type: string }) {
      newState.num++
    },
    add2(newState: { num: number }, action: { type: string, val: number }) {
      newState.num += action.val
    },
  },

  // 优化redux-thunk异步写法(模仿vuex) - 异步写法
  asyncAction: {
    asyncAAdd1: ((dispatch: Function) => {
      setTimeout(() => {
        dispatch({ type: 'add1' })
      }, 1000);
    })
  },

  // 名字统一管理
  // actionNames: {
  //   add1: 'add1',
  //   add2: 'add2',
  // }

  // 上述写法比较繁琐,需要把actionNames 写活,
  actionNames: {}

}

// 定义一个全局变量 actionNames
const actionNames = {};
// 需要遍历 store.actionNames ,拿到其每一项键,这样就不用再add1: 'add1'这样罗列写出来了
for (let key in store.actions) {
  // actionNames.add1 = add1'
  actionNames[key] = key;
}

store.actionNames = actionNames;


export default store;